/******************************************************************************
* Copyright (C) 2013 ShenZhen ComTop Information Technology Co.,Ltd
* All Rights Reserved.
* 本软件为深圳康拓普开发研制。未经本公司正式书面同意，其他任何个人、团体不得使用、
* 复制、修改或发布本软件.
*****************************************************************************/

package com.code.common.commonservice;

import java.io.Serializable;

import org.apache.log4j.Logger;

/**
 * 
 * @author 陈萌
 * @version 1.0
 * @since JDK1.6
 * @history 2013-1-23 陈萌 新建 
 */
public class QueryCondition implements Cloneable, Serializable {
    /** serialVersionUID 属性*/
    private static final long serialVersionUID = 1L;

    /** 逻辑符 */
    private String strLogicalOperator = "";

    /** 左括弧 */
    private String strLeftBracket = "";

    /** 属性名 */
    private String strAttribute = "";

    /** 操作符 */
    private String strOperator = "";

    /** 值 */
    private Object objValue = "";

    /** 右括弧 */
    private String strRightBracket = "";

    /** 日志对象 */
    private transient final Logger logger = Logger.getLogger(QueryCondition.class);

    /**
     * 默认构造函数
     */
    public QueryCondition() {
    }


    /**
     * 构造函数，支持int
     *
     * @param pstrLogicalOperator 逻辑符
     * @param pstrLeftBracket 左括弧
     * @param pstrAttribute 属性名
     * @param pstrOperator 操作符
     * @param intValue 值
     * @param pstrRightBracket 右括弧
     */
    public QueryCondition(String pstrLogicalOperator, String pstrLeftBracket, String pstrAttribute,
            String pstrOperator, int intValue, String pstrRightBracket) {
        this( pstrLogicalOperator,  pstrLeftBracket,  pstrAttribute,
                 pstrOperator, Integer.valueOf(String.valueOf(intValue)),  pstrRightBracket);
    }

    /**
     * 构造函数,支持long
     *
     * @param pstrLogicalOperator 逻辑符
     * @param pstrLeftBracket 左括弧
     * @param pstrAttribute 属性名
     * @param pstrOperator 操作符
     * @param longValue 值
     * @param pstrRightBracket 右括弧
     */
    public QueryCondition(String pstrLogicalOperator, String pstrLeftBracket, String pstrAttribute,
            String pstrOperator, long longValue, String pstrRightBracket) {
        this( pstrLogicalOperator,  pstrLeftBracket,  pstrAttribute,
                 pstrOperator, new Long(longValue),  pstrRightBracket);
    }

    /**
     * 构造函数
     *
     * @param pstrLogicalOperator 逻辑符
     * @param pstrLeftBracket 左括弧
     * @param pstrAttribute 属性名
     * @param pstrOperator 操作符
     * @param pobjValue 值
     * @param pstrRightBracket 右括弧
     */
    public QueryCondition(String pstrLogicalOperator, String pstrLeftBracket, String pstrAttribute,
            String pstrOperator, Object pobjValue, String pstrRightBracket) {
        this.strLogicalOperator = pstrLogicalOperator;
        this.strLeftBracket = pstrLeftBracket;
        this.strAttribute = pstrAttribute;
        this.strOperator = pstrOperator;
        this.objValue = pobjValue;
        this.strRightBracket = pstrRightBracket;
    }

    /**
     * 获取查询条件的逻辑符
     *
     * @return 查询条件的逻辑符
     */
    public String getLogicalOperator() {
        return this.strLogicalOperator;
    }

    /**
     * 设置查询条件的逻辑符
     *
     * @param pstrLogicalOperator 查询条件的逻辑符
     */
    public void setLogicalOperator(String pstrLogicalOperator) {
        this.strLogicalOperator = pstrLogicalOperator;
    }

    /**
     * 获取查询条件的左括弧
     *
     * @return 查询条件的左括弧
     */
    public String getLeftBracket() {
        return this.strLeftBracket;
    }

    /**
     * 设置查询条件的左括弧
     *
     * @param pstrLeftBracket 查询条件的左括弧
     */
    public void setLeftBracket(String pstrLeftBracket) {
        this.strLeftBracket = pstrLeftBracket;
    }

    /**
     * 获取查询条件的属性名
     *
     * @return 查询条件的属性名
     */
    public String getAttribute() {
        return this.strAttribute;
    }

    /**
     * 设置查询条件的属性名
     *
     * @param pstrAttribute 查询条件的属性名
     */
    public void setAttribute(String pstrAttribute) {
        this.strAttribute = pstrAttribute;
    }

    /**
     * 获取查询条件的操作符
     *
     * @return 查询条件的操作符
     */
    public String getOperator() {
        return this.strOperator;
    }

    /**
     * 设置查询条件的操作符
     *
     * @param pstrOperator 查询条件的操作符
     */
    public void setOperator(String pstrOperator) {
        this.strOperator = pstrOperator;
    }

    /**
     * 获取查询条件的值
     *
     * @return 查询条件的值
     */
    public Object getValue() {
        return this.objValue;
    }

    /**
     * 设置查询条件的值
     *
     * @param pobjValue 查询条件的值
     */
    public void setValue(Object pobjValue) {
        this.objValue = pobjValue;
    }

    /**
     * 获取查询条件的右括弧
     *
     * @return 查询条件的右括弧
     */
    public String getRightBracket() {
        return this.strRightBracket;
    }

    /**
     * 设置查询条件的右括弧
     *
     * @param pstrRightBracket 查询条件的右括弧
     */
    public void setRightBracket(String pstrRightBracket) {
        this.strRightBracket = pstrRightBracket;
    }

    /**
     * 对象转换成字符串
     *
     * @return 逻辑符+左括弧+属性名+操作符+值+右括弧
     */
    public String toString() {
        StringBuilder sbMessage = new StringBuilder(120);
        sbMessage.append(this.getLogicalOperator() + " ");
        sbMessage.append(this.getLeftBracket());
        sbMessage.append(this.getAttribute() + " ");
        sbMessage.append(this.getOperator() + " ");
        sbMessage.append(String.valueOf(this.getValue()));
        sbMessage.append(this.getRightBracket());
        return sbMessage.toString();
    }

    /**
     * 重载clone方法
     *
     * @return Object对象
     */
    public Object clone() throws CloneNotSupportedException {
        try {
            QueryCondition v = (QueryCondition) super.clone();
            return v;
        } catch (CloneNotSupportedException e) {
            logger.error("克隆不支持!",e);
        }
        return null;
    }
}